// export default ({store, route, redirect, $axios}) => {
//   $axios.onRequest(config => {
//     console.log("请求拦截器")
//     const accessToken = store.state.accessToken
//
//     // 如果有值 就在请求头带上
//     if (accessToken) {
//       // Authorization: Bearer token
//       config.headers.Authorization = 'Bearer ' + accessToken
//     } else {
//       console.log("没有accessToken")
//     }
//     // 请求头添加token
//     return config
//   })
//
//   $axios.onResponse(response => {
//     console.log('响应拦截器：', response)
//
//     // 测试：令牌不存在时，发送刷新令牌请求
//     if (!store.state.accessToken) {
//       // 刷新令牌
//       sendRefreshRequest(route, store, redirect)
//     }
//
//     // 不要 response.data 再返回，nuxt.js 底层会做这步操作
//     return response
//   })
//
//   $axios.onError(error => {
//     console.log('响应异常：', error.response.status)
//
//     // 非401未认证，直接放行
//     if (error.response.status !== 401) {
//       return Promise.reject(error)
//     }
//     // 401 发送刷新获取新令牌
//     sendRefreshRequest(route, store, redirect)
//     return Promise.reject('令牌过期，重新登录')
//   })
// }
//
// // 锁， 防止并发重复请求, true 还未请求，false 正在请求刷新
// let isLock = true // 防止并发重复发送刷新令牌请求， true 还未发送，false正在请求刷新
//
// // 发送刷新请求
// const sendRefreshRequest = (route, store, redirect) => {
//
//   if (isLock && store.state.refreshToken) {
//     isLock = false
//     console.log("要重新进行身份认证")
//     // 发送请求到认证客户端，通过刷新令牌获取新令牌
//     redirect(`${process.env.authURL}/refresh?redirectURL=${redirectURL(route)}`)
//   } else {
//     isLock = true
//     // 没有刷新令牌，跳转到登录页
//     // 重置用户状态
//     // console.log('跳转到登录页')
//     store.commit('RESET_USER_STATE')
//     // 跳转到登录页
//
//     redirect(`${process.env.authURL}?redirectURL=${redirectURL(route)}`)
//   }
// }
//
// // 获取重定向地址
// const redirectURL = (route) => {
//   // 客户端
//   if (process.client) {
//     return window.location.href
//   }
//   // 服务端 process.env._AXIOS_BASE_URL_  http://localhost:3000/api   http://blog.mengxuegu.com/api
//   return process.env._AXIOS_BASE_URL_.replace('api', '') + route.path
// }


export default ({store, route, redirect, $axios}) => {

  $axios.onRequest(config => {
    // console.log("请求拦截器")
    const accessToken = store.state.accessToken
    if (accessToken) {
      // Authorization: Bearer token
      config.headers.Authorization = 'Bearer ' + accessToken
    }
    // 请求头添加token
    return config
  })

  $axios.onResponse(response => {
    // console.log('响应拦截器：', response)
    // if(!store.state.accessToken) {
    //     sendRefreshRequest(route, store, redirect)
    // }
    return response
  })

  $axios.onError(error => {
    // console.log('响应异常：', error.response.status)
    if (error.response.status !== 401) {
      return Promise.reject(error)
    }
    // 401 发送刷新获取新令牌
    sendRefreshRequest(route, store, redirect)
    return Promise.reject('令牌过期，重新登录')
  })

}

let isLock = true // 防止并发重复发送刷新令牌请求， true 还未发送，false正在请求刷新

const sendRefreshRequest = (route, store, redirect) => {

  if (isLock && store.state.refreshToken) {
    isLock = false
    // 发送请求到认证客户端，通过刷新令牌获取新令牌
    redirect(`${process.env.authURL}/refresh?redirectURL=${redirectURL(route)}`)
  } else {
    isLock = true
    // 没有刷新令牌，跳转到登录页
    // 重置用户状态
    // console.log('跳转到登录页')
    store.commit('RESET_USER_STATE')
    // 跳转到登录页

    redirect(`${process.env.authURL}?redirectURL=${redirectURL(route)}`)
  }
}

// 获取重定向地址
const redirectURL = (route) => {
  // 客户端
  if (process.client) {
    return window.location.href
  }
  // 服务端 process.env._AXIOS_BASE_URL_  http://localhost:3000/api   http://blog.mengxuegu.com/api
  return process.env._AXIOS_BASE_URL_.replace('api', '') + route.path
}
